package com.ruoyi.user.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 防止失真的计算
 *
 * @discription:
 * @author: LargeRoc
 * @time: 2017年9月4日 上午11:37:27
 */
public class BigDecimalUtil {


    /**
     * 加
     *
     * @param d1
     * @param d2
     * @return
     * @discription:
     * @author: LargeRoc
     * @time: 2017年9月4日 上午11:29:30
     */
    public static BigDecimal add(BigDecimal d1, BigDecimal d2) {
        return d1.add(d2).setScale(2, RoundingMode.HALF_UP);
    }

    /**
     * 减
     *
     * @param d1
     * @param d2
     * @return
     * @discription:
     * @author: LargeRoc
     * @time: 2017年9月4日 上午11:30:31
     */
    public static BigDecimal sub(BigDecimal d1, BigDecimal d2) {
        return d1.subtract(d2).setScale(2, RoundingMode.HALF_UP);
    }


    /**
     * 乘
     *
     * @param d1
     * @param d2
     * @return
     * @discription:
     * @author: LargeRoc
     * @time: 2017年9月4日 上午11:29:21
     */
    public static BigDecimal mul(BigDecimal d1, BigDecimal d2) {
        return d1.multiply(d2).setScale(2, RoundingMode.HALF_UP);
    }

    /**
     * 除
     *
     * @param d1    被除数
     * @param d2    除数
     * @param scale 保留几位
     * @return
     * @discription:
     * @author: LargeRoc
     * @time: 2017年9月4日 上午11:35:39
     */
    public static BigDecimal div(BigDecimal d1, BigDecimal d2, int scale) {
        if (scale < 0) {
            throw new IllegalArgumentException("The scale must be a positive integer or zero");
        }
        return d1.divide(d2, scale, RoundingMode.HALF_UP);
    }
}
